home *** CD-ROM | disk | FTP | other *** search
/ Aminet 25 / Aminet 25 (1998)(GTI - Schatztruhe)[!][Jun 1998].iso / Aminet / dev / misc / BoulderEngine.lha / BOULDER_Feb_13.lha / BOULDER.C next >
Encoding:
C/C++ Source or Header  |  1980-01-01  |  7.9 KB  |  315 lines

  1. /* =================================================================
  2.    =  BOULDER DASH MAIN BODY. ©1993 by SAVELSOFTWARE inc.          =
  3.    =  Idea: Peter Liepa., C coding: Levas Vabolis.                 =
  4.    =  (In Fact real BOULDER DASH is © by First Star Soft. )        =
  5.    ================================================================= */
  6. #include "BOULDER0.C" /* graphics */
  7. #include "BOULDER3.C" /* man */
  8. #include "LEVELS.C"   /* Lygiai */
  9. #include "ROTATE.C"   /* color cycle */
  10. /* #include "music.c"*/ /* Sound routines V1.0 or higher */
  11. STATIC UBYTE bummx[50],bummy[50],bummi[50],Adz,Adb,GREITIS;
  12. STATIC USHORT BUMPOINT,clos,fillalready,oldclos,levl,MAXLEVL;
  13. STATIC ULONG HSCORE;
  14. SHORT NextLevel();
  15. titrai()
  16. {
  17. SetAPen(&rastport,5L); RectFill(&rastport,63L,0L,799L,11L);
  18. PrntI(70,1,16); PrntI(80,1,18); PrntI(130,1,10); PrntI(140,1,11);
  19. PrntI(150,1,12); PrntI(160,1,13); PrntI(170,1,5); PrntI(180,1,18);
  20. PrntI(230,1,5); PrntI(240,1,14); PrntI(250,1,0); PrntI(260,1,15);
  21. PrntI(270,1,13); PrntI(280,1,18); PrntI(360,1,17); PrntI(370,1,11);
  22. PrntI(380,1,5); PrntI(390,1,14); PrntI(400,1,0); PrntI(410,1,15);
  23. PrntI(420,1,13); PrntI(430,1,18); PrntL(440,1,HSCORE);
  24. PrntI(510,1,11); PrntI(520,1,16); PrntI(530,1,18);
  25. Prnt(540,1,ITEMS);  PrntI(580,1,14); PrntI(590,1,12); PrntI(600,1,18);
  26. Prnt(610,1,levl); Prnt(190,1,LIVES); PrntL(290,1,SCORE); Prnt(90,1,0);
  27. }
  28. main()
  29. {
  30.  MAXLEVL=maximum();
  31.  levl=0;
  32.  pasiruosk(); WaitTOF(); AudioON();
  33.  scena(&rastport); Makegraphics(); titrai();
  34.  while(pekb(0xBFEC00)!=117)
  35.  {
  36.    rotate();
  37.    if(man2())
  38.    {
  39.     if(levl>0 && hx==-1) { levl--; }
  40.     if(levl<MAXLEVL && hx==1) {levl++; }
  41.     Prnt(610,1,levl); Delay(7); rotate(); Delay(6); rotate();
  42.    }
  43.    if(fire())
  44.    {
  45.     LIVES=2;
  46.     Play(); Audiopirst2(0); scena(&rastport); Makegraphics(); titrai();
  47.    }
  48.    Delay(1);
  49.  }
  50. AudioOFF(); for(levl=0;levl<126;levl++) {rotate(); }
  51. Delay(2);
  52. FMemory(); exit();
  53. } /* End of Main */
  54. Play()
  55. {
  56. SHORT n,x,y,i,j,l;
  57. BUMPOINT=0; HSCORE=10000; FINISH=0; GREITIS=3;
  58. level(levl); SCORE=0;
  59. SetRast(&rastport,0L); Makegraphics();
  60. show();
  61. titrai(); ALIVE=15;
  62. fillalready=0; oldclos=0;
  63. for(n=TIM;n>0;n--) {   ALIVE--; for(l=0;l<GREITIS;l++) {WaitTOF();}
  64.   bumm2();
  65.   for(x=0;x<29;x++) {
  66.    for(y=12;y>=0;y--) { j++;
  67.      if(Adz && j<70) { --Adz; Audiodzin2(Adz);}
  68.      if(Adb && j>70 && j<140){ --Adb; Audiopirst2(Adb);}
  69.                     
  70.     if (k(x,y)<9)
  71.        analize(x,y);
  72.     else { k(x,y)=k(x,y)/10; }
  73.    } /* NEXT Y */
  74.   }  /* NEXT X */
  75.   j=0;
  76.   if(Adzin) {Audiodzin(); Adz=64; Adzin=0;}
  77.   if(Abum) {Audiopirst(); Abum=0; Adb=64; }
  78.   if(!oldclos) { fillalready=1; }
  79.   if(oldclos>HMAGMA && !fillalready) { ffill(); }
  80.   if(!clos && !fillalready) { ffill(); }
  81.   oldclos=0; clos=0;
  82.   if(!ALIVE) { if(LIVES>0) {LIVES--; ALIVE=15; Death(); n=TIM; } }
  83.   Prnt(90,1,n/10); PrntL(290,1,SCORE);
  84.   Prnt(540,1,ITEMS);
  85.   if(!LIVES && !ALIVE) { n=0; }
  86.   i=pekb(0xbfec00);
  87.   if(i==117 || n<2)           /* ESC klavisas */
  88.    {
  89.     n=0;
  90.     if(LIVES>0)
  91.      {
  92.       WaitTOF(); LIVES--; n=TIM; Prnt(190,1,LIVES);
  93.       Death();
  94.      }
  95.    }
  96.   if(FINISH){ LIVES++; n=NextLevel(n); oldclos=0; fillalready=0; }
  97.   rotate();
  98. }    /* NEXT N */
  99.  
  100. Delay(5);
  101. hide();
  102. Delay(50);
  103.  
  104. } /* End of Play */
  105.  
  106. SHORT NextLevel(m)
  107. SHORT m;
  108. {
  109. SHORT i,n=0;
  110.  Audiodzin();
  111.  for(i=m;i>0;i-=20) {
  112.      SCORE+=10; PrntL(290,1,SCORE);
  113.      rotate();
  114.      if(n)
  115.       Audiopip(10);
  116.      else
  117.       {Audiodzin2(10); }
  118.        n=!n;
  119.                     } Audiodzin2(0);
  120.  if(SCORE>HSCORE) {HSCORE=SCORE; PrntL(440,1,HSCORE);}
  121.  levl++; if(levl>MAXLEVL) {levl=0;}
  122.  Delay(50); hide(); level(levl); show(); titrai(); Delay(10);
  123.  FINISH=0; return(TIM);
  124. } /* end of n=NextLevel(n) */
  125. Death()
  126. {
  127.   Audiopirst2(0); Delay(60); hide(); level(levl); show(); titrai();
  128.   fillalready=0; oldclos=0;
  129. }
  130. ffill()
  131. {
  132. SHORT x,y,fff=3;
  133.  
  134. fillalready=1;
  135. if(oldclos>CRISTAL) {fff=2;}
  136. for(x=1;x<30;x++)
  137.  {
  138.   for(y=1;y<12;y++)
  139.    {
  140.     if(e(x,y)==6) {set(x,y,fff); }
  141.    }
  142.  }
  143. }
  144. analize(x,y)  /* <<<<<<<<< Pati rimciausia paprograme >>>>>>>>>>>>> */
  145. SHORT x,y;
  146. {
  147. LONG kq,jj;
  148. SHORT q,c1,c2,c3,c4,p,kz,i,j,bb,zz,uzz,manhere,os;
  149. SHORT ez[5];
  150. q=e(x,y);
  151. if (q==10) { man(x,y); ALIVE++; return; }
  152. if(q==9 && !ITEMS) {set(x,y,0); WaitTOF(); set(x,y,11);
  153.   WaitTOF(); WaitTOF(); set(x,y,9); e(x,y)=12; }
  154. if(q<2) { return; }
  155. if(q==7) {return; }
  156. c1=x+1; c2=x-1; c3=y-1; c4=y+1;
  157. p=e(x,c4);
  158. if (q==2 || q==3)
  159.  {
  160.   if (p==0) { set(x,c4,q); set(x,y,0); k(x,c4)=1; return; }
  161.   if (p==2 || p==3 || p==8 || p==14) {
  162.    if(!e(c2,y) && !e(c2,c4))
  163.     { set(c2,y,q); set(x,y,0); k(c2,y)=0; if(p==5){Adzin=1;} return;}
  164.    if(!e(c1,y) && !e(c1,c4))
  165.     { set(c1,y,q); set(x,y,0); k(c1,y)=9; if(p==5){Adzin=1;} return;}
  166.   }
  167.   if (k(x,y)>0) {
  168.     if(p==4 || p==10 || p==14) { bumm(x,y,0); }
  169.     if(p==5) { bumm(x,y,3); Adzin=1;}
  170.    }
  171.   if(q==3 && k(x,y)!=0) {Adzin=1;}
  172.   k(x,y)=0;
  173.   return;
  174.  }
  175. bb=0; manhere=0; uzz=1; ez[0]=7; ez[5]=7;
  176. ez[1]=e(c1,y); ez[2]=e(x,c3); ez[3]=e(c2,y);
  177. ez[4]=e(x,c4);
  178. if(k(x,c3)==1) {ez[2]=6;}
  179.  for(i=1; i<=5; i++)
  180.  {
  181.   if (ez[i]==6) {bb=1;}
  182.   if (ez[i]==10) { manhere=1; }
  183.   if (!ez[i]) {uzz=0;}
  184.  }
  185. if (manhere) {bb=1;}
  186. /* if (uzz && !manhere) {return; } */
  187. if (q==4) {
  188.     if (bb) { bumm(x,c3,0); return; }
  189.     jj=4L; zz=0; ;kz=0; if(k(x,y)>1) {kz=k(x,y)-1;}
  190.     while (jj>0L && !zz)
  191.     { kq=jj+kz-3L;
  192.       if (kq>4) {kq-=4;}
  193.       if (kq<1) {kq+=4;}
  194.       if(!ez[kq]) { zz=1; go(c1,c2,c3,c4,kq,q,x,y); }
  195.       jj--;
  196.     }  return;
  197.  }
  198. if (q==5) {
  199.    if (bb) {bumm(x,c3,3); return; }
  200.    jj=1L; zz=0; kz=0;
  201.   if (k(x,y)>1) { kz=k(x,y)-1; }
  202.   while (jj<5L && !zz)
  203.   { kq=jj+kz-2L;
  204.    if (kq>4) {kq-=4; }
  205.    if (kq<1) {kq+=4; }
  206.    if (!ez[kq]) {zz=1; go(c1,c2,c3,c4,kq,q,x,y); }
  207.    jj++;
  208.   } return;
  209. }
  210. if(q==6) {
  211.   os=0;
  212.   for(i=1;i<5;i++) {
  213.     if (ez[i]<2) { os=1; j=i; }
  214.    }
  215.   clos+=os; oldclos++;
  216.   if (os && (!ez[j] || ez[j])) {
  217.     if( galima(21) )
  218.       { mgo(j,x,y,c1,c2,c3,c4); }
  219.    }
  220.  }
  221. if(q==15) /* Judanti Siena */
  222.  {
  223.   if(!e(c2,y)) {set(c2,y,15); return;}
  224.   if(!e(c1,y)) {set(c1,y,15); k(c1,y)=9; return;}
  225.  }
  226. if(q==16) /* Neauganti magma */
  227.  {
  228.   if(!e(x,c4)) { q=e(x,c3); if(q==2 || q==3)
  229.   { if(galima(11)) { set(x,c4,q); set(x,c3,0); } } }
  230.   return;
  231.  }
  232. j=e(x,c4);
  233. if(q==17) /* Dzin-Dzin Siena */
  234.  {
  235.   q=e(x,c3); if(k(x,c3)==1)
  236.   {
  237.    if(q==2) {set(x,c3,0); if(!j){set(x,c4,3); Adzin=1; }}
  238.    if(q==3) {set(x,c3,0); if(!j){set(x,c4,2); Adzin=1; }}
  239.   } return;
  240.  }
  241. if(q==18) /* Akmenu generatorius */
  242.  { if(!j) {set(x,c4,2); } }
  243. if(q==19) /* Bril. generatorius */
  244.  { if(!j) {set(x,c4,3); } }
  245. if(q==21) { if(k(x,c3)==1) {sprogmina(c1,c2,c3,y); }return; } /* mina */
  246. if(q==23) {BigSuck(x,y,c2,c3);
  247.            } /* Juodoji skyle, SUCK EVERYTHING! */
  248. if(q==14) { p=e(x,c4); if(k(x,y)==0){
  249.       if(p==0){set(x,y,0); set(x,c4,14);
  250.                 k(x,c4)=1; return;}
  251.       if(p==2 || p==3 || p==8 || p==q) {
  252.                      if(!e(c2,y) && !e(c2,c4))
  253.                                  {set(c2,y,q); set(x,y,0); return; }
  254.                      if(!e(c1,y) && !e(c1,c4))
  255.                                  {set(c1,y,q); set(x,y,0); return; }
  256.         } /* if p=2,3,8,14 */
  257.                             return; }/* if K */
  258.            if(p==0){set(x,y,0); set(x,c4,14); k(x,c4)=1; return;}
  259.            bumm(x,c3,0);}      /* BOMBA */
  260. return;
  261. }
  262. BigSuck(x,y,c2,c3) /* Juod. skyles siurblys */
  263. SHORT x,y,c2,c3;
  264. {
  265. SHORT i,j;
  266.  for(i=c2;i<x+2;i++) {
  267.    for(j=c3;j<y+2;j++) {
  268.       if(e(i,j)!=7 && e(i,j)!=23 && e(i,j)!=8) {set(i,j,0); }
  269.    }
  270.  }
  271. }
  272. sprogmina(c1,c2,c3,c4) /* Didelis sprogimas */
  273. SHORT c1,c2,c3,c4;
  274. {
  275.  if(e(c2,c3-1)!=7){bumm(c2,c3-1,0);}
  276.  if(e(c1,c3-1)!=7){bumm(c1,c3-1,0);}
  277.  if(e(c2,c4)!=7){bumm(c2,c4,0);}
  278.  if(e(c1,c4)!=7){bumm(c1,c4,0);}
  279. }
  280. bumm(x,y,i)
  281. SHORT x,y,i;
  282. {
  283.  SHORT j,z;
  284.  BUMPOINT++; bummi[BUMPOINT]=i; bummx[BUMPOINT]=x;
  285.  bummy[BUMPOINT]=y;  Abum=1;
  286.  for(j=x-1;j<x+2;j++)
  287.  {
  288.   for(z=y;z<y+3;z++)
  289.   {
  290.    if (e(j,z)!=7) {set(j,z,11); }
  291.   }
  292.  }
  293. }
  294. bumm2()
  295. {
  296. SHORT n;
  297. for(n=1;n<=BUMPOINT;n++) { b2(n); }
  298. BUMPOINT=0; }
  299.  
  300. b2(n)
  301. SHORT n;
  302. {
  303. SHORT x,y,i,j,z;
  304.  x=bummx[n]; y=bummy[n]; i=bummi[n];
  305.  WaitTOF();
  306.  for(j=x-1;j<x+2;j++)
  307.   {
  308.    for(z=y;z<y+3;z++)
  309.     {
  310.      if (ek[z*30+j]!=7) {set(j,z,i); }
  311.     }
  312.   }
  313. }
  314.  
  315.